sgsR: Structurally Guided SamplingTristan Goodbody, Nicholas Coops, Martin Queinnec, Joanne White, Piotr Tompalski, Andrew Hudak, David Auty, Ruben Valbuena, Antoine LeBoeuf, Ian Sinclair, Grant McCartney, Jean-Francois Prieur, Murray Woods
University of British Columbia
Brief inventory and sampling overview
Discuss using auxiliary variables within sampling frameworks
Structurally guided sampling using Airborne Laser Scanning
sgsR overview
Programmatic examples of the package
Purpose: Obtain knowledge about the population (forest area) under investigation and provide estimates of specific target variables.
Needed information: Defined by the scope & scale of the inventory. Answered by questions like:
Who/what is the information for? (e.g. Reporting obligations, timber production)
How big of an area are we inventorying? (e.g. National level, operational level)
Answers dictate the sampling approaches to fulfill inventory obligations and objectives.
Sampling can be:
Labour intensive
Logistically challenging
Expensive
Common sampling methods include randomized sampling where probabilities for each sample unit are known and equivalent.
Systematic sampling methods are also common, where sample units are selected based on a defined distance.
Different tessellation shapes are fairly common
And combinations of systematic and simple random sampling also exists
Probability-based sampling does not leverage auxiliary data such as:
The ALS data also provides an excellent source of prior information that may be used in the design phase of the field survey to reduce the size of the field data set. Gobakken et al. (2013)
Stratification using auxiliary data can lead to representative sampling approaches.
#--- perform stratification ---#
sraster <- strat_quantiles(mraster = mr$zq90, # p90
nStrata = 5) # 5 strata in p90#--- perform dual metric stratification ---#
sraster <- strat_quantiles(mraster = mr$zq90, # p90
mraster2 = mr$zsd, # standard deviation of height
nStrata = 10, # 10 strata in p90
nStrata2 = 3) # 3 strata in zsd#--- perform stratification ---#
sraster <- strat_quantiles(mraster = mr$zq90, # p90
mraster2 = mr$zsd, # standard deviation of height
nStrata = 10, # 10 strata in p90
nStrata2 = 3) # 3 strata in zsd
#--- structurally guided stratified sampling ---#
sample_strat(sraster = sraster, nSamp = 100, plot = TRUE)sgsRsgsR purposeA growing number of studies have demonstrated that a-priori use of ALS metrics to guide sampling design provides methods that are:
transparent
repeatable
tuneable
spatially-explicit
sgsR is intended to provide a simple to use toolbox for practitioners to leverage these benefits to provide primarily model-based sampling approaches for forest inventories.
sgsR was built using the terra, sf, & tidyverse packages
There are 4 primary function verbs that sgsR uses:
strat_* - apply stratification to metrics raster (mraster) and output a stratified raster (sraster)
sample_* - allocate samples using srasters produced from strat_* functions.
calculate_*- calculate sample information or create useful intermediary sampling products.
extract_* - extract pixels values from rasters to samples
Lets read in some ALS metrics
Lets read in some ALS metrics - mraster.
#--- Stratification ---#
#--- Load ALS metrics from sgsR internal data ---#
r <- system.file("extdata", "mraster.tif", package = "sgsR")
#--- Read ALS metrics using the terra package ---#
mraster <- terra::rast(r)Lets also read in a linear road access network.
#--- Load access network from sgsR internal data ---#
a <- system.file("extdata", "access.shp", package = "sgsR")
#--- load the access vector using the sf package ---#
access <- sf::st_read(a)Like before, lets stratify p90 in to 4 strata based on quantiles.
#--- perform stratification ---#
sraster <- strat_quantiles(mraster = mraster$zq90, # input ALS metric - p90
nStrata = 4) # desired number of strata (4)Now lets use the sraster output.
Request 100 proportionally allocated samples.
Bring in the access road.
Specify we dont want samples within 50 m of access.
Or further than 400 m from access.
Mapped result (A) and plotted result (B).
Note buffered access in A. Points are samples in both A & B.
When constraining by access its important to make sure that you’re still sampling the entire distribution of metrics.
Practitioners may ask:
“I have an existing sample network, can I use those same sample locations?”
“If I go and visit those same sample units, where should I locate new samples for structural representation?”
existing sampleLets create an existing sample of 50 plots using simple random sampling (sample_srs).
existingAugmenting an existing sample can be done using the Adapted Hypercube Evaluation of a Legacy Sample (AHELS) algorithm. Originally presented by Malone, Minansy & Brungard (2019).
sample_ahels() works by:
Determining representation of existing sample.
Determining number of additional samples that can / need to be added.
Generate quantile and covariance matrix of ALS metrics.
Identify where new samples are needed to balance quantile density and sampling density.
Iteratively locate samples.
We have our existing sample
Now we can use the sample_ahels() algorithm with our als metrics.
Specify our existing sample.
And specify we want 50 new sample units (nSamp).
sample_ahels() resultMapped result (A) and plotted result (B).
Note ratios (black/red) and additional added samples e.g n = 2 for each stratum.
sample_ahels() resultexisting only (A) and addition of new samples (B).
We see that metric and sample density become quite even - structurally representative.
sgsR package provides many methods to implement SGS approachessgsR functionalitySpecial thanks to the Canadian Wood Fibre Centre for funding this research!
My Twitter: @GoodbodyT
IRSS Twitter: @IRSS_UBC
Collaborators